import type { DefectiveItemDistribution } from '@/api/defectiveItemDistribution'
import type { DefectItemSummary } from '@/api/defectItemSummary'
import type { ProductionReport } from '@/api/productionReport'
import type { OutputStatistics } from '@/api/outputStatistics'
import type { InboundOrder } from '@/api/warehouseReceipt'

// 格式化日期
const formatDate = (dateString: string) => {
  const date = new Date(dateString)
  return date.toISOString().split('T')[0]
}

// 导出数据到CSV格式（可以作为Excel打开）
export const exportToCSV = (data: DefectiveItemDistribution[], fileName: string) => {
  // CSV头部
  const headers = ['时间', '不良品项编号', '不良品项名称', '数量', '总数量', '占比(%)']
  
  // 转换数据
  const csvData = data.map(item => [
    formatDate(item.time),
    item.defectItemNumber,
    item.defectItemName,
    item.quantity,
    item.totalQuantity,
    item.percentage
  ])
  
  // 添加合计行
  const totalQuantity = data.reduce((sum, item) => sum + item.quantity, 0)
  csvData.push(['合计', '', '', totalQuantity, '', ''])
  
  // 组合CSV内容
  const csvContent = [
    headers.join(','),
    ...csvData.map(row => row.join(','))
  ].join('\n')
  
  // 添加BOM以支持中文
  const BOM = '\uFEFF'
  const blob = new Blob([BOM + csvContent], { 
    type: 'text/csv;charset=utf-8;' 
  })
  
  // 下载文件
  const url = window.URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = `${fileName}.csv`
  link.style.display = 'none'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  window.URL.revokeObjectURL(url)
}

// 导出数据到Excel格式（暂时使用CSV格式）
export const exportToExcel = async (data: DefectiveItemDistribution[], fileName: string) => {
  try {
    // 暂时使用CSV格式导出，避免xlsx导入问题
    exportToCSV(data, fileName)
    return true
  } catch (error) {
    console.error('导出失败:', error)
    return false
  }
}

// 导出生产报表数据到CSV格式
export const exportToCSVProduction = (data: ProductionReport[], fileName: string) => {
  // CSV头部
  const headers = ['工单号', '产品编号', '产品名称', '产品规格', '产品单位', '工序编号', '工序名称', '工单状态', '计划数量', '实际数量', '完成率(%)', '报工数量', '任务计划数量', '任务实际数量', '任务完成率(%)', '任务计划开始时间', '任务计划结束时间', '任务实际开始时间', '任务实际结束时间', '工单计划开始时间', '计划结束时间', '实际开始时间', '实际结束时间', '备注']
  
  // 转换数据
  const csvData = data.map(item => [
    item.workOrderNumber,
    item.productNumber,
    item.productName,
    item.productSpecification,
    item.productUnit,
    item.workProcessNumber,
    item.workProcessName,
    item.workOrderStatus,
    item.workOrderPlanQuantity,
    item.workOrderActualQuantity,
    item.workOrderPlanQuantity === 0 ? 0 : Math.round((item.workOrderActualQuantity / item.workOrderPlanQuantity) * 100),
    item.reportingQuantity,
    item.taskPlanQuantity,
    item.taskActualQuantity,
    item.taskPlanQuantity === 0 ? 0 : Math.round((item.taskActualQuantity / item.taskPlanQuantity) * 100),
    formatDate(item.taskPlanStartTime),
    formatDate(item.taskPlanEndTime),
    formatDate(item.taskActualStartTime),
    formatDate(item.taskActualEndTime),
    formatDate(item.workOrderPlanStartTime),
    formatDate(item.workOrderPlanEndTime),
    formatDate(item.workOrderActualStartTime),
    formatDate(item.workOrderActualEndTime),
    item.workOrderRemark
  ])
  
  // 添加合计行
  const totalPlanQuantity = data.reduce((sum, item) => sum + item.workOrderPlanQuantity, 0)
  const totalActualQuantity = data.reduce((sum, item) => sum + item.workOrderActualQuantity, 0)
  const totalReportingQuantity = data.reduce((sum, item) => sum + item.reportingQuantity, 0)
  const totalCompletionRate = totalPlanQuantity === 0 ? 0 : Math.round((totalActualQuantity / totalPlanQuantity) * 100)
  const totalTaskPlanQuantity = data.reduce((sum, item) => sum + item.taskPlanQuantity, 0)
  const totalTaskActualQuantity = data.reduce((sum, item) => sum + item.taskActualQuantity, 0)
  const totalTaskCompletionRate = totalTaskPlanQuantity === 0 ? 0 : Math.round((totalTaskActualQuantity / totalTaskPlanQuantity) * 100)
  
  csvData.push(['合计', '', '', '', '', '', '', '', totalPlanQuantity, totalActualQuantity, totalCompletionRate, totalReportingQuantity, totalTaskPlanQuantity, totalTaskActualQuantity, totalTaskCompletionRate, '', '', '', '', '', '', '', ''])
  
  // 组合CSV内容
  const csvContent = [
    headers.join(','),
    ...csvData.map(row => row.join(','))
  ].join('\n')
  
  // 添加BOM以支持中文
  const BOM = '\uFEFF'
  const blob = new Blob([BOM + csvContent], { 
    type: 'text/csv;charset=utf-8;' 
  })
  
  // 下载文件
  const url = window.URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = `${fileName}.csv`
  link.style.display = 'none'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  window.URL.revokeObjectURL(url)
}

// 导出生产报表数据到Excel格式（暂时使用CSV格式）
export const exportToExcelProduction = async (data: ProductionReport[], fileName: string) => {
  try {
    // 暂时使用CSV格式导出，避免xlsx导入问题
    exportToCSVProduction(data, fileName)
    return true
  } catch (error) {
    console.error('导出失败:', error)
    return false
  }
}

// 导出产量统计数据到CSV格式
export const exportToCSVOutput = (data: OutputStatistics[], fileName: string) => {
  // CSV头部
  const headers = ['统计ID', '报工日期', '工单号', '产品编号', '产品名称', '产品规格', '计划数量', '实际产量', '单位']
  
  // 转换数据
  const csvData = data.map(item => [
    item.statisticsId,
    formatDate(item.reportingDate),
    item.workOrderNumber,
    item.productNumber,
    item.productName,
    item.productSpecification,
    item.workOrderPlanQuantity,
    item.productQuantity,
    item.unit
  ])
  
  // 添加合计行
  const totalPlanQuantity = data.reduce((sum, item) => sum + item.workOrderPlanQuantity, 0)
  const totalActualQuantity = data.reduce((sum, item) => sum + item.productQuantity, 0)
  
  csvData.push(['合计', '', '', '', '', '', totalPlanQuantity, totalActualQuantity, ''])
  
  // 组合CSV内容
  const csvContent = [
    headers.join(','),
    ...csvData.map(row => row.join(','))
  ].join('\n')
  
  // 添加BOM以支持中文
  const BOM = '\uFEFF'
  const blob = new Blob([BOM + csvContent], { 
    type: 'text/csv;charset=utf-8;' 
  })
  
  // 下载文件
  const url = window.URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = `${fileName}.csv`
  link.style.display = 'none'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  window.URL.revokeObjectURL(url)
}

// 导出产量统计数据到Excel格式（暂时使用CSV格式）
export const exportToExcelOutput = async (data: OutputStatistics[], fileName: string) => {
  try {
    // 暂时使用CSV格式导出，避免xlsx导入问题
    exportToCSVOutput(data, fileName)
    return true
  } catch (error) {
    console.error('导出失败:', error)
    return false
  }
}

// 导出不良品项汇总数据到CSV格式
export const exportToCSVSummary = (data: DefectItemSummary[], fileName: string) => {
  // CSV头部
  const headers = ['工单号', '产品名称', '产品规格', '工序名称', '生产工人', '报工数量', '良品数量', '不良品数量', '不良品项名称', '生产开始时间', '生产结束时间']
  
  // 转换数据
  const csvData = data.map(item => [
    item.workOrderNumber,
    item.productName,
    item.productSpecification,
    item.workProcessName,
    item.productionWorker,
    item.reportingQuantity,
    item.goodQuantity,
    item.defectQuantity,
    item.defectItemName,
    formatDate(item.productionStartTime),
    formatDate(item.productionEndTime)
  ])
  
  // 添加合计行
  const totalReportingQuantity = data.reduce((sum, item) => sum + item.reportingQuantity, 0)
  const totalGoodQuantity = data.reduce((sum, item) => sum + item.goodQuantity, 0)
  const totalDefectQuantity = data.reduce((sum, item) => sum + item.defectQuantity, 0)
  csvData.push(['合计', '', '', '', '', totalReportingQuantity, totalGoodQuantity, totalDefectQuantity, '', '', ''])
  
  // 组合CSV内容
  const csvContent = [
    headers.join(','),
    ...csvData.map(row => row.join(','))
  ].join('\n')
  
  // 添加BOM以支持中文
  const BOM = '\uFEFF'
  const blob = new Blob([BOM + csvContent], { 
    type: 'text/csv;charset=utf-8;' 
  })
  
  // 下载文件
  const url = window.URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = `${fileName}.csv`
  link.style.display = 'none'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  window.URL.revokeObjectURL(url)
}

// 导出不良品项汇总数据到Excel格式（暂时使用CSV格式）
export const exportToExcelSummary = async (data: DefectItemSummary[], fileName: string) => {
  try {
    // 暂时使用CSV格式导出，避免xlsx导入问题
    exportToCSVSummary(data, fileName)
    return true
  } catch (error) {
    console.error('导出失败:', error)
    return false
  }
}

// 导出入库单数据到CSV格式
export const exportToCSVInboundOrder = (data: InboundOrder[], fileName: string) => {
  // CSV头部
  const headers = ['库存ID', '入库单号', '入库类型', '入库时间', '备注', '创建人', '创建时间', '修改人', '修改时间', '状态']
  
  // 转换数据
  const csvData = data.map(item => [
    item.storageId,
    item.entryOrderNumber,
    item.entryType,
    formatDate(item.entryTime),
    item.remarks,
    item.createdBy,
    formatDate(item.createdTime),
    item.modifiedBy,
    formatDate(item.modifiedTime),
    item.isDelete ? '已删除' : '正常'
  ])
  
  // 组合CSV内容
  const csvContent = [
    headers.join(','),
    ...csvData.map(row => row.join(','))
  ].join('\n')
  
  // 添加BOM以支持中文
  const BOM = '\uFEFF'
  const blob = new Blob([BOM + csvContent], { 
    type: 'text/csv;charset=utf-8;' 
  })
  
  // 下载文件
  const url = window.URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = `${fileName}.csv`
  link.style.display = 'none'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  window.URL.revokeObjectURL(url)
}

// 导出入库单数据到Excel格式（暂时使用CSV格式）
export const exportToExcelInboundOrder = async (data: InboundOrder[], fileName: string) => {
  try {
    // 暂时使用CSV格式导出，避免xlsx导入问题
    exportToCSVInboundOrder(data, fileName)
    return true
  } catch (error) {
    console.error('导出失败:', error)
    return false
  }
}

// 导出出库单数据到CSV格式
export const exportToCSVOutboundOrder = (data: any[], fileName: string) => {
  // CSV头部
  const headers = ['出库ID', '出库单号', '出库类型', '出库时间', '审核状态', '备注', '缩略图', '附件', '创建人', '创建时间', '修改人', '修改时间', '状态']
  
  // 转换数据
  const csvData = data.map(item => [
    item.outboundId,
    item.outboundOrderNumber,
    item.outboundType,
    formatDate(item.outboundTime),
    item.approvalStatus,
    item.remarks,
    item.bkThumbnail || '',
    item.annex || '',
    item.createdBy,
    formatDate(item.createdTime),
    item.modifiedBy,
    formatDate(item.modifiedTime),
    item.isDelete ? '已删除' : '正常'
  ])
  
  // 组合CSV内容
  const csvContent = [
    headers.join(','),
    ...csvData.map(row => row.join(','))
  ].join('\n')
  
  // 添加BOM以支持中文
  const BOM = '\uFEFF'
  const blob = new Blob([BOM + csvContent], { 
    type: 'text/csv;charset=utf-8;' 
  })
  
  // 下载文件
  const url = window.URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = `${fileName}.csv`
  link.style.display = 'none'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  window.URL.revokeObjectURL(url)
}

// 导出出库单数据到Excel格式（暂时使用CSV格式）
export const exportToExcelOutboundOrder = async (data: any[], fileName: string) => {
  try {
    // 暂时使用CSV格式导出，避免xlsx导入问题
    exportToCSVOutboundOrder(data, fileName)
    return true
  } catch (error) {
    console.error('导出失败:', error)
    return false
  }
}
